from abc import (
    abstractmethod,
)
from typing import (
    Tuple,
)

import trio

from libp2p.io.abc import (
    Closer,
)
from libp2p.network.stream.net_stream_interface import (
    INetStream,
)
from libp2p.stream_muxer.abc import (
    IMuxedConn,
)


class INetConn(Closer):
    muxed_conn: IMuxedConn
    event_started: trio.Event

    @abstractmethod
    async def new_stream(self) -> INetStream:
        ...

    @abstractmethod
    def get_streams(self) -> Tuple[INetStream, ...]:
        ...
